package com.yc.web.servlets;

import com.yc.dao.RedisHelper;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.*;

@WebServlet(value = "/chart.action")
public class ChartServlet extends BaseServlet {
    protected void getChart(HttpServletRequest req, HttpServletResponse resp) throws InvocationTargetException, InstantiationException, IllegalAccessException, IOException {
//        Jedis jedis = new Jedis("39.96.175.141", 6379); // Redis服务器地址和端口号
        Jedis jedis = RedisHelper.getRedisInstance();

        try {
            // 使用 SCAN 命令获取所有符合 '*_shoe_praise' 模式的键
            String cursor = "0";
            ScanParams scanParams = new ScanParams().match("*_shoe_praise");
            Set<String> keys = new HashSet<>();

            do {
                ScanResult<String> scanResult = jedis.scan(cursor, scanParams);
                cursor = scanResult.getStringCursor();
                keys.addAll(scanResult.getResult());
            } while (!cursor.equals("0"));

            // 创建一个新的列表来存储结果
            List<Map<String, Object>> resultList = new ArrayList<>();

            // 遍历每个键，获取值并设置点赞数为键的长度
            for (String key : keys) {
                Set<String> values = jedis.smembers(key); // 获取 Set 类型的值

                // 获取商品ID，假设键的格式为 "商品ID_shoe_praise"
                String productId = key.split("_")[0];

                // 设置点赞数为键的长度
                int praise = values.size();

                // 创建一个新的 Map 对象，存储商品名和点赞数
                Map<String, Object> item = new HashMap<>();
                item.put("goods_name", productId); // 商品ID作为商品名
                item.put("praise", praise); // 将点赞数设置为键的长度

                // 添加到结果列表中
                resultList.add(item);
            }

            // 打印结果
            System.out.println("最终的结果为：" + resultList);

            // 输出到客户端
            super.writeObiectJson(resultList, resp);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}
